/**
 * 
 */
package com.hson.demo.base.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * 数据验证
 * 
 * @author Hungel.zou
 * @time 2015年6月26日 下午12:10:24
 */
public class DataValidateUtil {

	/**
	 * 验证邮箱
	 * 
	 * @param email
	 * @return
	 */
	public static boolean checkEmail(String email) {
		boolean flag = false;
		try {
			String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
			Pattern regex = Pattern.compile(check);
			Matcher matcher = regex.matcher(email);
			flag = matcher.matches();
		} catch (Exception e) {
			flag = false;
		}
		return flag;
	}

	/**
	 * 验证手机号码
	 * 
	 * @param mobiles
	 * @return
	 */
	public static boolean checkMobileNumber(String mobileNumber) {
		boolean flag = false;
		try {
			// Pattern regex =
			// Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
			Pattern regex = Pattern.compile("^((1[0-9]))\\d{9}$");
			Matcher matcher = regex.matcher(mobileNumber);
			flag = matcher.matches();
		} catch (Exception e) {
			flag = false;
		}
		return flag;
	}
	
	/**
	 * 检查字符串不为空
	 * 
	 * @param str
	 * @return
	 */
	public static boolean checkString(String str){
		return StringUtil.isNotEmptyORNull(str);
	}
	
	/**
	 * 检查输入字符串是否为整数
	 * 
	 * @param in
	 * @return
	 */
	public static boolean checkInt(String in){
		if(checkString(in)){
			try{
				Integer.parseInt(in);
				return true;
			} catch(NumberFormatException e){
				return false;
			}
		}
		return false;
	}
	
	/**
	 * 检查输入字符串是否为Long
	 * 
	 * @param in
	 * @return
	 */
	public static boolean checkLong(String in){
		if(checkString(in)){
			try{
				Long.parseLong(in);
				return true;
			} catch(NumberFormatException e){
				return false;
			}
		}
		return false;
	}
	
	/**
	 * 检查输入字符串是否为double
	 * 
	 * @param in
	 * @return
	 */
	public static boolean checkDouble(String in){
		if(checkString(in)){
			try{
				Double.parseDouble(in);
				return true;
			} catch(NumberFormatException e){
				return false;
			}
		}
		return false;
	}
	
	/**
	 * 获取字符串的长度，如果有中文，则每个中文字符计为2位
	 * 
	 * @param value
	 *            指定的字符串
	 * @return 字符串的长度
	 */
    public static int length(String value) {
        int valueLength = 0;
        String chinese = "[\u0391-\uFFE5]";
        /* 获取字段值的长度，如果含中文字符，则每个中文字符长度为2，否则为1 */
        for (int i = 0; i < value.length(); i++) {
            /* 获取一个字符 */
            String temp = value.substring(i, i + 1);
            /* 判断是否为中文字符 */
            if (temp.matches(chinese)) {
                /* 中文字符长度为2 */
                valueLength += 2;
            } else {
                /* 其他字符长度为1 */
                valueLength += 1;
            }
        }
        return valueLength;
    }
    
    /**
     * 判断输入是否包含中文
     * 
     * @param val
     * @return
     */
    public static boolean hasChinese(String val){
    	String chinese = "[\u0391-\uFFE5]";
    	for (int i = 0; i < val.length(); i++) {
    		String temp = val.substring(i, i + 1);
    		 if (temp.matches(chinese)) {
    			 return true;
    		 }
    	}
    	return false;
    }
    
    /**
     * 判断输入是否包含非中文字符
     * 
     * @param val
     * @return
     */
    public static boolean containNonChinese(String val){
    	String chinese = "[\u0391-\uFFE5]";
    	for (int i = 0; i < val.length(); i++) {
    		String temp = val.substring(i, i + 1);
    		 if (!temp.matches(chinese)) {
    			 return true;
    		 }
    	}
    	return false;
    }
    
    /**
     * 判断登录密码
     * 密码为6-20个数字和字母组成字符，不支持中文、特殊符号等特殊字符
     * @param val
     * liangtl 2015-12-18
     */
    public static boolean checkLoginPassword(String password){
    	if(StringUtil.isEmpty(password)){
    		return false;
    	}
		
		if(password.matches("^[a-zA-Z0-9]{6,20}$")){
			return true;
		}else{
			return false;
		}
    }
    
    /**
     * 判断日期格式是否为 yyyy-MM-dd
     * @param val
     * liangtl 2015-12-18
     */
    public static boolean checkDateFormat(String date){
    	if(StringUtil.isEmpty(date)){
    		return false;
    	}
		
		if(date.matches("^[0-9]{4}-[0-9]{2}-[0-9]{2}$")){
			return true;
		}else{
			return false;
		}
    }
}
